package com.zhw.dto;


import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.zhw.dataobject.OrderDetail;
import com.zhw.enums.OrderStatusEnum;
import com.zhw.enums.PayStatusEnum;
import com.zhw.utils.EnumUtil;
import com.zhw.utils.serializer.Date2LongSerializer;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * Created by 廖师兄
 * 2017-06-11 18:30
 */

//@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)  //旧的用法
//@JsonInclude(JsonInclude.Include.NON_NULL)    //返回给前端字段为null的就不返回。。。。   在yml中全局配置  不然每个对象都要写注解
@Data
public class OrderDTO {         //数据传输对象，是数据表字段的拼接  忽略了提示，没导包都不报错，不知如何还原

    /** 订单id. */
    private String orderId;

    /** 买家名字. */
    private String buyerName;

    /** 买家手机号. */
    private String buyerPhone;

    /** 买家地址. */
    private String buyerAddress;

    /** 买家微信Openid. */
    private String buyerOpenid;

    /** 订单总金额. */
    private BigDecimal orderAmount;

    /** 订单状态, 默认为0新下单. */
    private Integer orderStatus= OrderStatusEnum.NEW.getCode();   ///注意  这里不赋值，后面也不赋值，可能会说类型不符美哦与这个类？

    /** 支付状态, 默认为0未支付. */
    private Integer payStatus= PayStatusEnum.WAIT.getCode();

   /** 创建时间. */
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date createTime;

   /** 更新时间. */
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date updateTime;

    List<OrderDetail> orderDetailList;   //一个订单会买多件商品，包含多条商品详情，增加这个字段以便计算订单总价

    @JsonIgnore   //  josn转对象时忽略这个方法
    public OrderStatusEnum getOrderStatusEnum() {    // 用于前端，根据状态码返回提示信息，而不是直接展示状态码
        return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);
    }

    @JsonIgnore
    public PayStatusEnum getPayStatusEnum() {
        return EnumUtil.getByCode(payStatus, PayStatusEnum.class);
    }
}
